package org.example.dependencyinversion;

import lombok.Data;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.stereotype.Component;

/**
 * @author 依赖倒置
 * @description 依赖倒置
 */
@SpringBootTest
public class DependencyInversion {


    @Autowired
    private Person person;

    @Test
    void runTest() {
        person.receive(new Email());
    }

}


@Data
@Component
class  Email {
    public String getInfo()
    {
        return "电子邮件信息：hello word";
    }
}

/**
 * 完成Person接手信息功能
 * 方式1分析
 * 1、简单、比较容量想到
 * 2、如果我们获取的对象是微信，短信等等，则新增类，同时Person也要增加相应的接手方法
 * 3、解决思路：引入一个抽象的接口IReceiver，表示接收者，这样Person类与接口IReceiver发生依赖
 *            因为Email，微信 等等属于接手的范围，他们各自实现IReceiver接口即可,这样我们就符合依赖倒置原则
 */
@Component
class Person {
    public void receive(Email email) {
        System.out.println(email.getInfo());
    }
}